/**
 * 增强学习脚本
 * 深度学习：测试子目录结构、BUILD.gn完整配置、CPP内容、CPP与GN的关系
 */

const path = require('path');
const fs = require('fs');

const OH_CODE_PATH = process.env.OHCODE_PATH || process.argv[2] || 'C:/AI_Dev/HarmonyPilot_5764/OHCode';

async function main() {
    console.log('🎓 OpenHarmony 增强学习系统 v2.0');
    console.log('==========================================\n');
    
    if (!fs.existsSync(OH_CODE_PATH)) {
        console.error(`❌ 错误：OHCode 目录不存在: ${OH_CODE_PATH}`);
        process.exit(1);
    }
    
    console.log(`📂 OHCode 目录: ${OH_CODE_PATH}\n`);
    
    console.log('📚 本次将深度学习：');
    console.log('  ✓ 每个测试子目录的完整结构');
    console.log('  ✓ BUILD.gn 的详细配置（sources, include_dirs, deps, defines等）');
    console.log('  ✓ CPP 测试文件的内容和模式');
    console.log('  ✓ CPP 与 BUILD.gn 的关系（include 与 include_dirs 的匹配）');
    console.log('  ✓ sources 如何引用项目源文件和测试文件');
    console.log('  ✓ module_out_path 的命名规则');
    console.log('  ✓ deps（内部依赖）和 external_deps（外部依赖）的模式\n');
    
    try {
        // 导入增强学习器
        const { EnhancedCodebaseIndexer } = require('../out/core/knowledge/EnhancedCodebaseIndexer');
        
        console.log('🚀 开始增强学习...\n');
        
        const startTime = Date.now();
        
        const indexer = new EnhancedCodebaseIndexer(OH_CODE_PATH);
        await indexer.enhancedLearn();
        
        // 保存增强知识
        const savePath = 'core/knowledge/enhanced-knowledge.json';
        await indexer.save(savePath);
        
        const duration = Math.round((Date.now() - startTime) / 1000);
        
        console.log(`\n✅ 增强学习完成！总耗时: ${duration} 秒`);
        
        // 显示知识统计
        const knowledge = indexer.getEnhancedKnowledge();
        console.log('\n📊 学习成果详情：');
        console.log(`\n【测试模块】`);
        console.log(`  - 总数: ${knowledge.testModules.length}`);
        
        console.log(`\n【BUILD.gn 深度模式】`);
        console.log(`  - 完整配置: ${knowledge.buildGnFullPatterns.length}`);
        console.log(`  - module_out_path: ${knowledge.moduleOutPathPatterns.length}`);
        
        console.log(`\n【CPP 测试模式】`);
        console.log(`  - CPP 文件: ${knowledge.cppTestPatterns.length}`);
        console.log(`  - CPP-GN 关系: ${knowledge.cppGnRelations.length}`);
        
        console.log(`\n【Sources 引用模式】`);
        console.log(`  - 项目源文件: ${knowledge.sourcesPatterns.projectSource.length}`);
        console.log(`  - 本地测试文件: ${knowledge.sourcesPatterns.localTest.length}`);
        console.log(`  - Mock 文件: ${knowledge.sourcesPatterns.mockFiles.length}`);
        
        console.log(`\n【Include_dirs 模式】`);
        console.log(`  - 总数: ${knowledge.includeDirsPatterns.length}`);
        
        console.log(`\n【Deps 模式】`);
        console.log(`  - 内部依赖: ${knowledge.depsPatterns.internal.length}`);
        console.log(`  - 外部依赖: ${knowledge.depsPatterns.external.length}`);
        
        console.log(`\n【Defines 模式】`);
        console.log(`  - 总数: ${knowledge.definesPatterns.length}`);
        
        console.log('\n🎯 知识库可用于：');
        console.log('  ✅ 生成准确的测试子目录结构');
        console.log('  ✅ 生成完整且正确的 BUILD.gn 配置');
        console.log('  ✅ 正确引用项目源文件（使用${variable}）');
        console.log('  ✅ 配置合理的 include_dirs');
        console.log('  ✅ 添加正确的 deps 和 external_deps');
        console.log('  ✅ 设置适当的 defines');
        console.log('  ✅ 理解 CPP 代码与 BUILD.gn 的对应关系');
        
        console.log(`\n📁 知识库位置: ${savePath}`);
        console.log('💡 可以与之前的 codebase-knowledge.json 结合使用！');
        
    } catch (error) {
        console.error('\n❌ 增强学习失败:', error);
        console.error('\n💡 故障排查:');
        console.error('   1. 确保已编译: npm run compile');
        console.error('   2. 检查 OHCode 目录结构');
        console.error('   3. 查看详细错误信息');
        process.exit(1);
    }
}

main().catch(error => {
    console.error('脚本执行失败:', error);
    process.exit(1);
});

